package 简单.模拟;

import java.util.Arrays;

/**
 * 给你一个下标从 0 开始的一维整数数组 original 和两个整数 m 和  n 。
 * 你需要使用 original 中 所有 元素创建一个 m 行 n 列的二维数组。
 * <p>
 * original 中下标从 0 到 n - 1 （都 包含 ）的元素构成二维数组的第一行，
 * 下标从 n 到 2 * n - 1 （都 包含 ）的元素构成二维数组的第二行，依此类推。
 * <p>
 * 请你根据上述过程返回一个 m x n 的二维数组。如果无法构成这样的二维数组，
 * 请你返回一个空的二维数组。
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/convert-1d-array-into-2d-array
 */
public class 将一维数组转变成二维数组_2022 {

    public static void main(String[] args) {

        int[] nums = {1, 2, 3, 4};
        int[][] ints = construct2DArray(nums, 2, 2);
        for (int[] anInt : ints) {
            System.out.println(Arrays.toString(anInt));
        }

    }

    /**
     * 二维数组转一维数组：
     * 思路：将上面几行的元素个数+当前行位置的个数=一维数组的下标
     * (row,column)  row*columns+column=index
     *
     * @param original
     * @param m
     * @param n
     * @return
     */
    public static int[][] construct2DArray(int[] original, int m, int n) {
        if (original.length != m * n) {
            return new int[0][0];
        }
        int[][] twoArray = new int[m][n];
        for (int i = 0; i < original.length; i += n) {  //一行一行添加
            int row = i / n;
            for (int column = 0; column < n; column++) {  //二维数组和一维数组数组下标对应关系
                twoArray[row][column] = original[row * n + column];
            }
        }
        return twoArray;
    }

}
